home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_02_1984_Transactor_Publishing.d64 / cia timer demo (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  4KB  |  150 lines

  1. 1000 rem"[211]=save"0:6timer b show",8
  2. 1010 [143]"atn_1150
  3. 1020 rem----------------------------
  4. 1030 rem 6526/cia timer-b  liz deal
  5. 1040 rem----------------------------
  6. 1050 tm=08:mc=832:b0=176
  7. 1052 ifpeek(mc)*peek(mc+1)<>76*75thenforj=832to1022:readv:pokej,v:nextj
  8. 1060 i$="":print"[155][147]";
  9. 1070 print"  <cr;ctrl;wipe+cr> timeout:  :intbit "
  10. 1080 input" do test 1 2    1[157][157][157]";i$
  11. 1090 pokeb0,tm
  12. 1100 onasc(i$+"0")-48goto1120,1130
  13. 1110 end
  14. 1120 sysmc:goto1060
  15. 1130 sysmc+6:sysmc+3:goto1060
  16. 1135 rem source code below can be omitted
  17. 1137 rem data from 5000 on must be entered
  18. 1140 rem----------------------------
  19. 1150 sys700     ;pal
  20. 1160 .opt oo
  21. 1170 *=$0340    ;save to $3ff
  22. 1180 ;
  23. 1190 jmp test1
  24. 1200 jmp test2
  25. 1210 jmp nmisw
  26. 1220 here .word mynmi
  27. 1230 ;
  28. 1240 p =17*40+28      ;for screen
  29. 1250 cia2   =$dd00    ;non-kb cia
  30. 1260 ta2     =cia2+4  ;timer a
  31. 1270 tb2     =cia2+6  ;timer b
  32. 1280 cra2    =cia2+$e ;ctrl reg a
  33. 1290 crb2    =cia2+$f ;ctrl reg b
  34. 1300 icr2    =cia2+$d ;int ctrl+flags
  35. 1310 cia1   =$dc00    ;the other cia
  36. 1320 prb1    =cia1+1  ;stop key here
  37. 1330 col    =$d800
  38. 1340 mask1  =%00000010
  39. 1350 mask2  =%10000010
  40. 1360 ctrlky =$fb
  41. 1370 anynmi =$318
  42. 1380 nornmi =$fe47
  43. 1390 inex   =$febc
  44. 1400 val    =$b0      ;(NULL)es into tb2
  45. 1410 once   =val+1
  46. 1420 to     =col+p    ;to always moves
  47. 1430 in     =col+p+1  ;in,noise when
  48. 1440 noise  =$d418    ;timerb sets flg
  49. 1450 ;---------------------------------
  50. 1460 ;tb sometimes fails to set a flag
  51. 1470 ;show#1 - not asking for interrupt
  52. 1480 ;---------------------------------
  53. 1490 test1 =*
  54. 1500 lda icr2
  55. 1510 sei:lda #%01111111:jsr setup
  56. 1520 lda #mask1
  57. 1530 wait =*
  58. 1540 jsr teststop:beq quit
  59. 1550 ; watch timer b reload
  60. 1560 jsr watch
  61. 1570 ; check timeout flag,loop if 0
  62. 1580 bit icr2:beq wait
  63. 1590 ; flag worked this time
  64. 1600 jsr click:beq wait ;always more
  65. 1610 ; back to basic
  66. 1620 quit cli:rts
  67. 1630 ;---------------------------------
  68. 1640 ;show#2 - asking for an interrupt
  69. 1650 ;seems to work most of the time
  70. 1660 ;=====(can't prove non-failure!)
  71. 1670 ;---------------------------------
  72. 1680 nmisw =*
  73. 1690 ; clr flags in hope of surviving
  74. 1700 ; what follows
  75. 1710 lda icr2:lda #%01111111:sta icr2
  76. 1720 ; revector nmi stuff to here
  77. 1730 ; this can kill you
  78. 1740 lda here:ldx here+1:jsr setvec
  79. 1750 ; now tell the icr & clocks
  80. 1760 lda #mask2:jsr setup:rts
  81. 1770 ;
  82. 1780 mynmi =*
  83. 1790 pha:lda icr2:and #2:beq myi2
  84. 1800 txa:pha:tya:pha:jsr click:jmp inex
  85. 1810 myi2 pla:jmp nornmi
  86. 1820 ;
  87. 1830 test2 =*
  88. 1840 ; nothing better to do loop
  89. 1850 jsr watch:jsr teststop:bne test2
  90. 1860 ; set things back to normal
  91. 1870 lda #0:sta icr2
  92. 1880 lda #<nornmi:ldx #>nornmi
  93. 1890 setvec =*
  94. 1900 sta anynmi:stx anynmi+1
  95. 1910 rts
  96. 1920 ;
  97. 1930 teststop =*
  98. 1940 ldx prb1:cpx #ctrlky:rts
  99. 1950 ;
  100. 1960 watch =*
  101. 1970 ; watches timer b reload
  102. 1980 ; ignore quick reading results
  103. 1990 ldx tb2:cpx val:bcc watch9
  104. 2000 cpx once:beq watch9
  105. 2010 inc to            ;displ timeout
  106. 2020 watch9 stx once:rts
  107. 2030 ;
  108. 2040 click =*    ;   & displ flag set
  109. 2050 inc in:ldx #8:stx noise
  110. 2060 sig1 dex:bne sig1
  111. 2070 stx noise:rts   ;z=1
  112. 2080 ;
  113. 2090 setup =*
  114. 2100 sta icr2:sta to:sta in:inc in
  115. 2110 ; init clocks (val*ta)whatevers
  116. 2120 ldx #$ff:stx ta2:stx ta2+1
  117. 2130 inx:stx tb2+1:stx once
  118. 2140 ldx val:stx tb2
  119. 2150 ; force load time,tb counts ta
  120. 2160 ; timeouts, cont mode,clocks run
  121. 2170 lda #%00010001:sta cra2
  122. 2180 lda #%01010001:sta crb2
  123. 2190 rts
  124. 2200 .end
  125. 2210 end
  126. 5000 data 76,75,3,76,151,3,76,106
  127. 5001 data 3,129,3,173,13,221,120,169
  128. 5002 data 127,32,213,3,169,2,32,175
  129. 5003 data 3,240,13,32,181,3,44,13
  130. 5004 data 221,240,243,32,198,3,240,238
  131. 5005 data 88,96,173,13,221,169,127,141
  132. 5006 data 13,221,173,73,3,174,74,3
  133. 5007 data 32,168,3,169,130,32,213,3
  134. 5008 data 96,72,173,13,221,41,2,240
  135. 5009 data 10,138,72,152,72,32,198,3
  136. 5010 data 76,188,254,104,76,71,254,32
  137. 5011 data 181,3,32,175,3,208,248,169
  138. 5012 data 0,141,13,221,169,71,162,254
  139. 5013 data 141,24,3,142,25,3,96,174
  140. 5014 data 1,220,224,251,96,174,6,221
  141. 5015 data 228,176,144,7,228,177,240,3
  142. 5016 data 238,196,218,134,177,96,238,197
  143. 5017 data 218,162,8,142,24,212,202,208
  144. 5018 data 253,142,24,212,96,141,13,221
  145. 5019 data 141,196,218,141,197,218,238,197
  146. 5020 data 218,162,255,142,4,221,142,5
  147. 5021 data 221,232,142,7,221,134,177,166
  148. 5022 data 176,142,6,221,169,17,141,14
  149. 5023 data 221,169,81,141,15,221,96
  150.